package com.forever7776.life.core.service.sys;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.forever7776.life.core.common.vo.SysUserSearchVO;
import com.forever7776.life.core.common.vo.UserBaseInfoVO;
import com.forever7776.life.core.entity.sys.SysUser;
import com.forever7776.life.remote.common.vo.ResultVO;

import java.util.List;

/**
 * <p>
 * 平台用户表 服务类
 * </p>
 *
 * @author kz
 * @since 2018-01-18
 */
public interface ISysUserService extends IService<SysUser> {

    /**
     * 根据账号用户名和密码(加密)查询用户信息
     *
     * @param username
     * @param pwd
     * @return
     */
    SysUser selectOne(String username, String pwd);

    /**
     * 根据账号登录名称和邮箱查询用户信息
     *
     * @param username
     * @param email
     * @return
     */
    SysUser selectOneByUsernameAndEmail(String username, String email);

    /**
     * 根据条件查询用户
     *
     * @param page
     * @param searchVO
     * @return
     */
    Page<SysUser> selectUsersByCondition(Page<SysUser> page, SysUserSearchVO searchVO);

    /**
     * 根据登录名查询用户
     *
     * @param username
     * @return
     */
    SysUser selectByUserName(String username);

    /**
     * 根据昵称查询用户
     *
     * @param nickname
     * @return
     */
    SysUser selectByNickName(String nickname);

    /**
     * 根据邮箱查询用户
     *
     * @param email
     * @return
     */
    Integer selectSysUserByEmail(String email);

    /**
     * 更新用户登录时间
     *
     * @param username
     * @return
     */
    ResultVO updateLoginTime(String username);

    /**
     * 更新用户登出时间
     *
     * @param username
     * @return
     */
    ResultVO updateLogoutTime(String username);

    /**
     * 批量更新用户的状态
     *
     * @param ids
     * @param status
     * @return
     */
    ResultVO batchSysUserStatus(String ids, Integer status);

    /**
     * 单个更新用户的状态
     *
     * @param id
     * @param status
     * @return
     */
    ResultVO updateSysUserStatus(String id, Integer status);

    /**
     * 注册账号校验
     *
     * @param sysUser
     * @return
     */
    ResultVO checkRegisterForm(SysUser sysUser);

    /**
     * 根据时间类型查询注册用数据
     *
     * @param type
     * @return
     */
    Integer selectRegisterCountByTimeType(String type);

    /**
     * 根据时间类型查询登录用数据
     *
     * @param type
     * @return
     */
    Integer selectLoginCountByTimeType(String type);

    /**
     * 查询用户量
     *
     * @return
     */
    Integer selectCount();

    /**
     * 根据用户登录名查询用户ID
     *
     * @param username
     * @return
     */
    String selectUserIdByUsername(String username);

    /**
     * 修改密码
     *
     * @param userId
     * @param newPwd
     * @return
     */
    ResultVO cpwd(String userId, String newPwd);

    /**
     * 查看用户数据，先从redis中获取，如果没有则从数据库中查询
     *
     * @param userId
     * @return
     */
    UserBaseInfoVO selectUserBaseInfoById(String userId);

    /**
     * 查看用户数据
     *
     * @param userIds
     * @return
     */
    List<UserBaseInfoVO> selectUserBaseInfos(List<String> userIds);
}
